{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "36d72b2d-7818-4a22-8776-44793a72112c",
   "metadata": {},
   "source": [
    "## 余弦定理（cosine law）的证明\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5d66ef5-ab26-4df4-84b3-22240c0b4ba9",
   "metadata": {},
   "source": [
    "**余弦定理** 三角形任何一边的平方等于其他两边平方的和减去这两边与它们夹角的余弦的积的两倍。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c08a8375-764b-412e-9f59-fae86a2164a1",
   "metadata": {},
   "source": [
    "具体针对任意三角形：比如三角形$\\triangle ABC$中,如果$\\angle A$，$\\angle B$，$\\angle C$的对边分别用a、b、c来表示那么就有如下关系：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "a^{2} & = b^{2} + c^{2} - 2bc \\cdot \\cos A \\\\\n",
    "b^{2} & = a^{2} + c^{2} - 2ac \\cdot \\cos B \\\\\n",
    "c^{2} & = a^{2} + b^{2} - 2ab \\cdot \\cos C\n",
    "\\end{aligned}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5549a023-e5b3-4e09-b839-c0706e6c9a10",
   "metadata": {},
   "source": [
    "**证明** 余弦定理的证明有很多种，我们这里利用解析几何的方式来证明：\n",
    "\n",
    "首先，我们将三角形$\\triangle ABC$放到笛卡尔直角坐标系下，并让$C$点与坐标系的原点对齐，\n",
    "让$B$点落在直角坐标系的$x$正半轴上，并且为了避免混淆，我们将$\\angle C$的大小用$\\theta$表示，如下图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d28f28d9-f0f7-4278-92f3-517e32bc2b26",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n",
      "theta: 116.56505117707799\n"
     ]
    },
    {
     "data": {
      "image/png": "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KT744AO9dbL7vN/2WQvBz7uw8amFRDKXl6cW/vXXXxg7diwuXboEpTJnZxunTp2KgwcP4uDBg3kpE0uXLsWff/6JvXv35ml9yjt+3qaPFxASUa61a9cOUVFRuHv3LsqXL5+jdfbs2YOFCxfmeZ/m5uZYvHhxntenvOPnbfrYGSCSubx0BojItPBuAiIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZMzN2AURkXMOHDzd2CURkZAohhDB2EURkPJm/AhQKhZErISJjYWeASOYYAoiI1wwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzP0/3Dd93an74VAAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "from draw_triangle import *\n",
    "draw_triangle((-3,6), (5,0))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bef98360-2db2-4a91-bf8c-1a93efe84feb",
   "metadata": {},
   "source": [
    "于是我们可知：$|AB|=c$，$|AC|=b$，$|BC|=a$，$\\angle C = \\theta$，\n",
    "$C$点坐标为$(0, 0)$，$B$点坐标为$(a, 0)$，$A$点坐标为$(b \\cdot \\cos \\theta, b \\cdot \\sin \\theta)$，\n",
    "于是根据两点间的距离公式，有：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "|AB| & = \\sqrt{(x_{a} - x_{b})^{2} + (y_{a} - y_{b})^{2}} \\\\\n",
    "     & = \\sqrt{(b \\cdot \\cos \\theta - a)^{2} + (b \\cdot \\sin \\theta - 0)^{2}}\n",
    "\\end{aligned}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99a95c58-e234-4b6c-9c4e-354f7e189976",
   "metadata": {},
   "source": [
    "我们将距离公式两边平方，并把$|AB|=c$代入，到如下结果：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "c^{2} & = |AB|^{2}  \\\\\n",
    "      & = (b \\cdot \\cos \\theta - a)^{2} + (b \\cdot \\sin \\theta - 0)^{2} \\\\\n",
    "      & = b^{2} \\cdot \\cos ^{2} \\theta - 2ab \\cdot \\cos \\theta + a^{2} + b^{2} \\cdot \\sin ^{2} \\theta\n",
    "\\end{aligned}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a502e9b0-ce74-4fe9-b734-478b1527fd1c",
   "metadata": {},
   "source": [
    "我们再根据三角恒等式$\\sin ^{2} \\theta + \\cos ^{2} \\theta = 1$，将上式合并整理：\n",
    "$$\n",
    "c^{2} = a^{2} + b^{2} - 2ab \\cdot \\cos \\theta\n",
    "$$\n",
    "\n",
    "于是余弦定理得证，同样方法可以证明另外两个公式。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1dba26c9-7296-46a9-8936-2774564e3b0d",
   "metadata": {},
   "source": [
    "由于解析几何中两点间的距离公式是基于勾股定理的，所以如果仅仅以平面几何的方式证明余弦定理方法也是一样的，\n",
    "只不过需要辅助线构造直角三角形，并且要考虑锐角和钝角三角形两种情况。有兴趣的同学可以自己试试。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bceae310-a0e5-494c-bf18-a4979e45e7dc",
   "metadata": {},
   "source": [
    "最后附上锐角三角形的图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a28d3c3b-2e45-416d-af85-6d4e9b8be883",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n",
      "theta: 71.56505117707799\n"
     ]
    },
    {
     "data": {
      "image/png": "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OHDgAJYvXy51OURUTgwDRFRuLVu2RGpqKhYuXIj69etLXQ4RlRO7CYhkzhTdBERk3TjPABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAEVVqKSkp8PLyQmxsrH7Z1KlT0atXL+mKKoelS5fC398fjo6OGDBgAB4/fmz0thVxvl26dMEHH3zwXPso7hwHDx6MJUuWmKBKKg7DABFZtQsXLsDGxgYdO3Ys8v2wsDC88sor8PPz0y+LiIhAs2bNKqjC5zdjxgwsX74ca9aswbFjx3DhwgXMnTvX6O0r4nx/++03fPLJJ+XevqRz/OijjzB//nykpaWZqlx6liAiWQMgrPlPQYcOHcS0adOEs7Oz0Ol0Bu9lZmYKV1dXcfz4cYPl3t7eYsOGDRVZZrmdPn1aKJVKce7cOf2y+fPni3r16hm9D0s/X2POsWXLlmLlypVSlCcLbBkgIqu1fv16VKtWDePGjcOTJ09w+/Ztg/f/+OMPqNVqtG3bVr/s/v37SExMhE6nQ6dOneDo6IjWrVvj4sWLZT6+TqfDwoULERgYCDs7O9SuXRvz588HAOTk5OD999+Hl5cX7O3t0aFDB5w5c8Zg+02bNqFJkyZwcHCAu7s7unfvjoyMDIN1Fi9ejG7duqFly5b6ZZ6ennjw4IFRNZryfEuq99lugi5duuD999/HlClT4ObmhurVq2POnDlF7teYc+zXrx82bNhQ5prJOAwDRGSVMjIyMGPGDCxcuBC+vr6oWrUqIiIiDNY5cuQIWrdubbDswoULAIAv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kjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEiIiKZYxggIiKSObXUBRCRtN577z2pSyAiiSmEEELqIohIOk//BCgUCokrISKpsGWASOYYAoiI9wwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzDEMEBERyRzDABERkcwxDBAREckcwwAREZHMMQwQERHJHMMAERGRzP0/QR/q1wWPxjIAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "from draw_triangle import *\n",
    "draw_triangle((2,6), (5,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "03e1fb28-1f2b-45d2-a973-d1ae65fdef47",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
